package com.nicolas.pattern.decorator;

/**
 * 装饰模式可以在不改变一个对象本身功能的基础上给对象增加额外的新行为，
 * 在现实生活中，这种情况也到处存在，例如一张照片，我们可以不改变照片本身，
 * 给它增加一个相框，使得它具有防潮的功能，而且用户可以根据需要给它增加不同类型的相框，甚至可以在一个小相框的外面再套一个大相框。

装饰模式是一种用于替代继承的技术，它通过一种无须定义子类的方式来给对象动态增加职责，
使用对象之间的关联关系取代类之间的继承关系。在装饰模式中引入了装饰类，
在装饰类中既可以调用待装饰的原有类的方法，还可以增加新的方法，以扩充原有类的功能。

装饰模式(Decorator Pattern)：动态地给一个对象增加一些额外的职责，
就增加对象功能来说，装饰模式比生成子类实现更为灵活。装饰模式是一种对象结构型模式。
 * @author nicolas  2017年2月12日 -- 上午10:08:45
 */
public class DecoratorMain {

	public static void main(String[] args) {
		Component  component,componentSB,componentBB; //全部使用抽象构件定义
        component = new Window();
        componentSB = new  ScrollBarDecorator(component);
        componentBB = new  BlackBorderDecorator(componentSB); //将装饰了一次之后的对象继续注入到另一个装饰类中，进行第二次装饰
        componentBB.display();
	}

}
